📖 SAGEMATH NOTEBOOK¶
(Phần 1. Tổng hợp các câu lệnh cơ bản và nâng cao trong SageMath)¶
💡 Thông tin tài liệu¶
Tài liệu được đính kèm theo Đồ án 1, đề tài: "Hướng dẫn sử dụng phần mềm SageMath và ứng dụng trong các học phần Toán đại cương"
(Link toàn văn Đồ án: SageMath-Tutorial.
Thực hiện bởi: Nguyễn Trung Kiên (20227180, Khoa Toán - Tin, Đại học Bách Khoa Hà Nội)
Giảng viên hướng dẫn: TS. Lê Văn Tứ
Mọi ý kiến đóng góp, thắc mắc hoặc phản hồi, vui lòng gửi về trang cá nhân (Facebook): Nguyễn Trung Kiên và hòm thư điện tử: kiennt.ethan@gmail.com để được hỗ trợ sớm nhất.
Xin chân thành cảm ơn!
🛠️ Hướng dẫn sử dụng Notebook¶
Cài SageMath và Jupyter Notebook, hoặc truy cập trực tuyến:
- Trang chủ SageCell của SageMath (đơn giản, không cần cài đặt)
- Trang chủ Cocalc (có thể mở file
.ipynbtrực tuyến)
Mở file
SageMath_Tutorial.ipynbbằng Jupyter Notebook hoặc upload lên CoCalc.Nhấn
Shift + Entertại mỗi ô để chạy lệnh SageMath.
Một số ô cần vài giây để xử lý, đặc biệt là các ô có biểu đồ.
# Kiem tra SageMath da duoc cai dat
version()
'SageMath version 10.5, Release Date: 2024-12-04'
Ngôn ngữ và biểu thức cơ bản trong SageMath¶
SageMath sử dụng cú pháp gần giống Python, hỗ trợ tính toán toán học mạnh mẽ.
Cú pháp cơ bản¶
- Phân biệt chữ hoa và chữ thường.
- Không cần
;kết thúc dòng. - Hỗ trợ toán tử:
+,-,*,/,^,**. - Dùng
show()để hiển thị kết quả đẹp.
Kiểu dữ liệu phổ biến¶
- Số nguyên, số thực, chuỗi, danh sách, boolean.
# Khai bao bien co ban
a = 10 # So nguyen
b = 3.14 # So thuc
c = "SageMath" # Chuoi
lst = [1, 2, 3] # Danh sach
flag = True # Boolean
a, b, c, lst, flag
(10, 3.14000000000000, 'SageMath', [1, 2, 3], True)
Phép toán cơ bản¶
# Phep toan so hoc
x = 2
y = 5
x + y, x * y, x^y, x**y, pow(x, y)
(7, 10, 32, 32, 32)
#### Hiển thị kết quả với `show()`
# Hien thi bieu thuc va ma tran
var('x')
f = x^2 + 2*x + 1
show(f)
M = matrix([[1, 2], [3, 4]])
show(M)
# Khai bao bien va bieu thuc
var('x y')
f = (x + y)^3
# Khai trien bieu thuc
expand(f)
x^3 + 3*x^2*y + 3*x*y^2 + y^3
# Rut gon bieu thuc
g = (x^2 - 1)/(x - 1)
simplify(g)
(x^2 - 1)/(x - 1)
2. Phân tích đa thức: nhân tử, chia đa thức¶
# Phan tich nhan tu
h = x^2 - 5*x + 6
factor(h)
(x - 2)*(x - 3)
3. Giải phương trình đại số¶
# Giai phuong trinh bac hai
solve(x^2 - 5*x + 6 == 0, x)
[x == 3, x == 2]
# Giai he phuong trinh
var('x y')
solve([x + y == 4, x - y == 2], x, y)
[[x == 3, y == 1]]
4. Giải tích: đạo hàm, tích phân, giới hạn¶
# Dao ham
f = sin(x^2)
diff(f, x)
2*x*cos(x^2)
# Dao ham cap cao
diff(f, x, 2)
-4*x^2*sin(x^2) + 2*cos(x^2)
# Tich phan bat dinh
integrate(exp(-x^2), x)
1/2*sqrt(pi)*erf(x)
# Tich phan xac dinh
integrate(x^2, (x, 0, 2))
8/3
# Gioi han
limit(1/x, x=0, dir='right')
+Infinity
# Khai bao so phuc
z1 = 2 + 3*I
z2 = 1 - I
# Cong, tru, nhan, chia
z1 + z2
z1 - z2
z1 * z2
z1 / z2
5/2*I - 1/2
2. Tính mô-đun, phần thực, phần ảo, liên hợp¶
# Mo-dun (module) cua so phuc
abs(z1)
sqrt(13)
# Phan thuc va phan ao
real(z1)
imag(z1)
3
# Lien hop
z1.conjugate()
-3*I + 2
3. Căn bậc hai và lũy thừa của số phức¶
# Can bac hai cua so phuc
sqrt(z1)
sqrt(3*I + 2)
# Luy thua so phuc
z1^2
12*I - 5
4. Chuyển đổi số phức sang dạng lượng giác¶
# Chuyen sang dang luong giac (polar form)
z = 1 + I
r = abs(z)
theta = arg(z) # goc
(r, theta)
(sqrt(2), 1/4*pi)
5. Nghiệm phức của phương trình¶
# Giai phuong trinh co nghiem phuc
var('x')
solve(x^2 + 1 == 0, x)
[x == -I, x == I]
6. Vẽ số phức trên mặt phẳng Argand¶
# Ve cac so phuc tren mat phang
G = list_plot([(real(z1), imag(z1)), (real(z2), imag(z2))],
plotjoined=False, marker='o', color='blue',
axes_labels=['Re', 'Im'], aspect_ratio=1)
G.show()
# Ve mot diem
p = point((2, 3), color='red', size=30)
# Ve mot doan thang
l = line([(0, 0), (2, 3)], thickness=2, color='blue')
# Hien thi dong thoi
(p + l).show()
2. Vẽ đường tròn, ellipse và parabol¶
# Duong tron tam (0, 0), ban kinh 2
circle((0, 0), 2, color='green').show()
# Ve elip bang parametric_plot
t = var('t')
ellipse = parametric_plot((3*cos(t), 2*sin(t)), (t, 0, 2*pi), color='purple')
ellipse.show()
3. Vẽ đồ thị hàm số trong không gian 2D¶
# Ve ham y = sin(x) tren [-pi, pi]
x = var('x')
plot(sin(x), (x, -pi, pi), color='orange', thickness=2).show()
4. Vẽ mặt phẳng và hàm số 3D¶
# Ve ham z = x^2 - y^2 tren mien [-2,2] x [-2,2]
x, y = var('x y')
plot3d(x^2 - y^2, (x, -2, 2), (y, -2, 2), color='cyan')
5. Vẽ mặt cầu, mặt trụ, mặt nón¶
# Mat cau tam goc, ban kinh 1
x, y, z = var('x y z')
implicit_plot3d(x^2 + y^2 + z^2 == 1, (x, -1.5, 1.5), (y, -1.5, 1.5), (z, -1.5, 1.5), color='skyblue')
# Mat tru: x^2 + y^2 = 1
implicit_plot3d(x^2 + y^2 == 1, (x, -1, 1), (y, -1, 1), (z, -2, 2), color='green')
6. Vẽ véc-tơ trong mặt phẳng¶
# Ve vector tu goc (0,0) den diem (2,3)
arrow((0, 0), (2, 3), color='red', width=2).show()
# Tao ma tran 2x2
A = matrix([[1, 2], [3, 4]])
show(A)
2. Các phép toán cơ bản với ma trận¶
B = matrix([[2, 0], [1, 2]])
A + B # Cong
A - B # Tru
A * B # Nhan
2 * A # Nhan voi so
A.transpose() # Chuyen vi
[1 3] [2 4]
3. Tính định thức, nghịch đảo, hạng ma trận¶
A.det() # Dinh thuc
A.inverse() # Ma tran nghich dao
A.rank() # Hang cua ma tran
2
4. Tính ma trận mũ và khai triển¶
A^2 # Luy thua A mu 2
A.exp() # Ma tran mu e^A
[-1/22*((sqrt(33) - 11)*e^sqrt(33) - sqrt(33) - 11)*e^(-1/2*sqrt(33) + 5/2) 2/33*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2)] [ 1/11*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2) 1/22*((sqrt(33) + 11)*e^sqrt(33) - sqrt(33) + 11)*e^(-1/2*sqrt(33) + 5/2)]
5. Giải hệ phương trình tuyến tính¶
# He: x + 2y = 3, 3x + 4y = 7
A = matrix([[1, 2], [3, 4]])
b = vector([3, 7])
x = A.solve_right(b) # Giai he Ax = b
show(x)
6. Kiểm tra độc lập tuyến tính của các vector hàng / cột¶
A.is_linearly_independent() # Kiem tra vector hang
A.columns().is_linearly_independent() # Vector cot
7. Tìm cơ sở và không gian sinh¶
A.row_space() # Khong gian hang
A.column_space() # Khong gian cot
Free module of degree 2 and rank 2 over Integer Ring Echelon basis matrix: [1 1] [0 2]
8. Tính giá trị riêng và vector riêng¶
A.eigenvalues() # Gia tri rieng
A.eigenvectors_right() # Vector rieng
[(-0.3722813232690144?, [(1, -0.6861406616345072?)], 1), (5.372281323269015?, [(1, 2.186140661634508?)], 1)]
9. Chéo hóa ma trận¶
A.diagonalization() # Cheo hoa (neu duoc)
10. Ma trận chuyển cơ sở¶
# Xac dinh ma tran chuyen co so tu B -> C
B = [vector([1, 0]), vector([1, 1])]
C = [vector([2, 1]), vector([1, 1])]
P = matrix(B).solve_right(matrix(C))
show(P) # Ma tran chuyen tu co so B sang C
Tính toán đại số trừu tượng trong SageMath¶
SageMath hỗ trợ các đối tượng đại số như nhóm, vành, trường, và đa thức.
1. Làm việc với nhóm (Group)¶
G = SymmetricGroup(3) # Nhom doi xung bac 3 (S3)
G.list() # Liet ke cac phan tu
G.order() # Bac cua nhom
G.is_abelian() # Kiem tra co phai nhom abel
False
2. Đa thức trong vành đa thức¶
R.<x> = PolynomialRing(QQ) # Vanh da thuc bac 1 tren Q
f = x^3 + 2*x + 1
g = x^2 - 1
f + g, f * g, f % g # Cong, nhan, chia lay du
(x^3 + x^2 + 2*x, x^5 + x^3 + x^2 - 2*x - 1, 3*x + 1)
3. Khai báo trường hữu hạn (Finite Field)¶
F = GF(7) # Truong huu han modulo 7
a = F(3)
b = F(5)
a + b, a * b, a^-1 # Cong, nhan, nghich dao
(1, 1, 5)
4. Tạo và kiểm tra vành¶
R = Integers(12) # Tao mot Z/12Z
R(5) * R(7) # Phep nhan trong vanh
R(5).is_unit() # Kiem tra phan tu co nghich dao
True
5. Kiểm tra tính chất đại số¶
f = x^3 + x + 1
f.is_irreducible() # Kiem tra da thuc co nguyen to khong
f.factor() # Phan tich thanh nhan tu
x^3 + x + 1
Tổ hợp, xác suất và logic trong SageMath¶
SageMath cung cấp các công cụ tính toán tổ hợp, mô phỏng xác suất, và biểu thức logic.
1. Tính toán tổ hợp: tổ hợp, chỉnh hợp, giai thừa¶
factorial(5) # Giai thua 5
120
binomial(5, 2) # To hop chap 2 cua 5
10
factorial(5)/factorial(5 - 2) # Chinh hop chap 2 cua 5
20
2. Mô phỏng xác suất rời rạc¶
X = [1, 2, 3]
P = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P)) # Ky vong
variance = sum((x - expectation)^2 * p for x, p in zip(X, P)) # Phuong sai
expectation, variance
(2.10000000000000, 0.490000000000000)
3. Biến ngẫu nhiên: phân phối nhị thức¶
n = 10
p = 0.3
binomial_probs = [binomial(n, k) * p^k * (1 - p)^(n - k) for k in range(n + 1)]
bar_chart(binomial_probs, width=0.6, title='Phan phoi nhi thuc', axes=True)
4. Biểu thức logic và mệnh đề¶
var('P Q')
(P & Q).simplify_logic() # P and Q
(P | ~Q).simplify_logic() # P or not Q
(P.implies(Q)).truth_table() # Bang chan tri
5. Tập hợp và mệnh đề định lượng¶
A = Set([1, 2, 3])
B = Set([3, 4, 5])
A.union(B), A.intersection(B), A.difference(B)
({1, 2, 3, 4, 5}, {3}, {1, 2})
Chuỗi số học trong SageMath¶
SageMath cho phép tính tổng, kiểm tra hội tụ và làm việc với chuỗi vô hạn, chuỗi lũy thừa, chuỗi Taylor, Fourier.
1. Tính tổng của chuỗi số học hữu hạn¶
sum(k for k in range(1, 11)) # Tong 1 + 2 + ... + 10
55
2. Tính tổng chuỗi vô hạn¶
var('n p')
assume(p > 1)
f = 1 / n^p
sum(f, n, 1, oo) # Chuoi zeta: hoi tu voi p > 1
sum(1/(n^p), n, 1, +Infinity)
3. Khai triển chuỗi Taylor¶
var('x')
f = sin(x)
f.taylor(x, 0, 5) # Khai trien Taylor cap 5 tai x = 0
1/120*x^5 - 1/6*x^3 + x
4. Khai triển chuỗi Maclaurin¶
exp(x).taylor(x, 0, 6) # Maclaurin la truong hop Taylor tai 0
1/720*x^6 + 1/120*x^5 + 1/24*x^4 + 1/6*x^3 + 1/2*x^2 + x + 1
5. Chuỗi Fourier cơ bản (với hàm tuần hoàn)¶
t = var('t')
f = piecewise([[(0, pi), t], [(pi, 2*pi), 0]]) # Ham don gian
fourier_series = f.fourier_series_partial_sum(n=5, var=t, period=2*pi)
plot(fourier_series, (t, 0, 2*pi), color='red', legend_label='Fourier sum')
6. Kiểm tra hội tụ chuỗi¶
sum(1/n^2, n, 1, oo).is_convergent() # True
sum(1/n, n, 1, oo).is_convergent() # False
Tính năng nâng cao trong SageMath¶
SageMath không chỉ hỗ trợ các phép toán cơ bản mà còn tích hợp các công cụ mạnh mẽ cho nghiên cứu và mô phỏng toán học nâng cao: lập trình, tính toán khoa học, tối ưu hóa, giao tiếp với phần mềm khác,...
1. Lập trình trong SageMath (dùng Python)¶
def f(x):
return x^2 + 2*x + 1
[f(n) for n in range(5)] # Tra ve danh sach gia tri cua f(n)
[1, 4, 9, 16, 25]
2. Viết vòng lặp và điều kiện¶
for i in range(1, 6):
if i % 2 == 0:
print(f"{i} la so chan")
2 la so chan 4 la so chan
3. Tính toán song song¶
@parallel
def g(n):
return n^2
list(g(n) for n in range(5)) # Chay song song cac gia tri
[0, 1, 4, 9, 16]
4. Tối ưu hóa¶
var('x y')
f = (x - 2)^2 + (y + 3)^2
minimize = find_minimum_on_interval(lambda t: (t - 2)^2, 0, 5)
minimize
5. Giải bài toán quy hoạch tuyến tính¶
from sage.numerical.mip import MixedIntegerLinearProgram
p = MixedIntegerLinearProgram(maximization=True)
x = p.new_variable()
p.set_objective(3*x[0] + 2*x[1])
p.add_constraint(x[0] + x[1] <= 4)
p.add_constraint(x[0] >= 0)
p.add_constraint(x[1] >= 0)
p.solve(), p.get_values(x)
(12.0, {0: 4.0, 1: -0.0})
6. Kết nối với phần mềm khác (R, Maxima, Octave, GAP,...)¶
r.eval('mean(c(1, 2, 3, 4, 5))') # Goi R de tinh trung binh
gap.eval('Size(SymmetricGroup(3))') # Goi GAP
7. Nhúng mã Latex hoặc biểu diễn đẹp với show()¶
var('x')
f = x^2 + 2*x + 1
show(f.factor())
8. Xuất đồ thị hoặc dữ liệu¶
plot(sin(x), (x, 0, 2*pi)).save("sin_graph.png") # Luu do thi ra file PNG